/**
 * Copyright (C) 2011 The Android Open Source Project 
 * Emial : guoyil199@163.com
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */ 
package com.ruler;


/**
 * @author Administrator
 * @Email guoyil199@163.com
 * @version V1.0
 * @Date 2015年12月10日 上午10:54:31
 * @Title <B>todo</B>
 * <pre>todo</pre>
 */

import java.math.BigDecimal;  

public class Arithmetic {  
  
    /** 
     * 提供精确的加法运算。 
     * @param v1 被加数 
     * @param v2 加数 
     * @return 两个参数的和 
     */   
    public static float add(float v1, float v2){  
        BigDecimal b1 = new BigDecimal(Float.toString(v1));  
        BigDecimal b2 = new BigDecimal(Float.toString(v2));  
        return b1.add(b2).floatValue();   
    }  
      
    /** 
     * 提供精确的减法运算。 
     * @param v1 被减数 
     * @param v2 减数 
     * @return 两个参数的差 
     */   
    public static float sub(float v1, float v2){  
        BigDecimal b1 = new BigDecimal(Float.toString(v1));  
        BigDecimal b2 = new BigDecimal(Float.toString(v2));  
        return b1.subtract(b2).floatValue();  
    }  
      
    /** 
     * 提供精确的乘法运算。 
     * @param v1 被乘数 
     * @param v2 乘数 
     * @return 两个参数的积 
     */  
  
    public static float mul(float v1, float v2){  
        BigDecimal b1 = new BigDecimal(Float.toString(v1));  
        BigDecimal b2 = new BigDecimal(Float.toString(v2));  
        return b1.multiply(b2).floatValue();  
    }   
      
    /** 
     * 提供（相对）精确的除法运算。当发生除不尽的情况时，由scale参数指 
     * 定精度，以后的数字四舍五入。 
     * @param v1 被除数 
     * @param v2 除数 
     * @param scale 表示表示需要精确到小数点以后几位。 
     * @return 两个参数的商 
     */  
  
    public static float div(float v1, float v2, int scale){  
        if(scale<0){  
            scale = 0;  
        }  
        BigDecimal b1 = new BigDecimal(Float.toString(v1));  
        BigDecimal b2 = new BigDecimal(Float.toString(v2));  
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).floatValue();  
  
    }  
      
    /** 
     * 提供精确的小数位四舍五入处理。 
     * @param v 需要四舍五入的数字 
     * @param scale 小数点后保留几位 
     * @return 四舍五入后的结果 
     */  
    public static float round(float v, int scale){  
        if(scale<0){  
            scale = 0;  
        }  
        BigDecimal b = new BigDecimal(Float.toString(v));  
        BigDecimal one = new BigDecimal("1");  
        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).floatValue();  
  
    }  
  
}  
